package com.mazaiting.generator.controller;

import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.entity.FieldTypeEntity;
import com.mazaiting.generator.domain.form.FieldTypeForm;
import com.mazaiting.generator.domain.query.FieldTypeQuery;
import com.mazaiting.generator.domain.vo.FieldTypeVO;
import com.mazaiting.generator.service.IFieldTypeService;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;

/**
 * 字段类型管理
 */
@RestController
@RequestMapping("/generator/v1/fieldType")
@RequiredArgsConstructor
public class FieldTypeController {

    private final IFieldTypeService fieldTypeService;

    /**
     * 查询字段分页列表
     * @param query 查询条件
     * @return 分页数据
     */
    @GetMapping("page")
    public BasePageVO<FieldTypeVO> page(@Valid FieldTypeQuery query) {
        return fieldTypeService.page(query);
    }

    /**
     * 保存字段类型
     * @param fieldTypeForm 表单信息
     * @return true: 新增成功; false: 新增失败
     */
    @PostMapping
    public boolean save(@Valid FieldTypeForm fieldTypeForm) {
        return fieldTypeService.save(fieldTypeForm);
    }

    /**
     * 更新字段类型
     * @param fieldTypeForm 字段信息
     * @return true: 更新成功; false: 更新失败
     */
    @PutMapping
    public boolean update(@Valid FieldTypeForm fieldTypeForm) throws EmptyObjectException {
        return fieldTypeService.update(fieldTypeForm);
    }

    /**
     * 根据 ID 查询字段信息
     * @param id 字段类型 ID
     * @return 字段信息
     */
    @GetMapping("{id}")
    public FieldTypeEntity get(@PathVariable("id") Long id) {
        return fieldTypeService.getById(id);
    }

    /**
     * 根据 ID 列表删除数据
     * @param ids 字段类型列表
     * @return true: 删除成功; false: 删除失败
     */
    @DeleteMapping
    public boolean delete(@RequestParam("ids") String ids) {
        List<Long> idList = Arrays.stream(ids.split(",")).map(Long::parseLong).toList();
        return fieldTypeService.removeBatchByIds(idList);
    }
}